package com.qf.day12;

/**
 * @author wgy
 * @version V1.0
 * @Project day12
 * @Package com.qf.day12
 * @Description: ${TODO}
 * @Date 2021/6/2 10:06
 * 主人类
 */
public class Master {
    /**
     * 姓名
     */
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 给狗狗喂食
     */
//    public void feed(Dog dog){
//        System.out.println(this.name+"开始喂食");
//        dog.eat();
//    }

    /**
     * 给猫咪喂食
     *
     */
//    public void feed(Cat cat){
//        System.out.println(this.name+"开始喂食");
//        cat.eat();
//    }

    /**
     * 给动物喂食
     * 使用多态优化
     * 应用场景1：使用父类作为方法形参实现多态，实际传递子类对象，使方法参数类型更为宽泛。
     * @param an
     */
    public void feed(Animal an){
        System.out.println(this.name+"开始喂食");
        an.eat();//eat(); 重写后调用子类的方法。
    }

    /**
     * 领养动物
     * 应用场景2：使用父类作为方法返回值实现多态，实际返回子类对象，使方法返回不同子类对象。
     */
    public Animal adopt(int type){ // type=1 狗狗  type=2 猫咪
        Animal animal=null;
        if(type==1){
            animal=new Dog();
        }else if(type==2){
            animal=new Cat();
        }
        return animal;
    }

}
